package com.superbytecode.cloud.tool.excel;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.CellData;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * All rights Reserved, Designed By www.super-master.com
 *
 * @ProjectName: beacon-cloud
 * @Package: com.superbytecode.cloud.tool.excel
 * @ClassName: LocalDateFormatConverter
 * @Description: [excel单元格时间格式数据转换器]
 * <p> </p>
 * @Author: [Lance Ting]
 * @Date: 2024/10/22 19:17
 * @Version: V1.0
 * @Copyright: 2024 www.super-master.com Inc. All rights reserved.
 * TODO: 注意,本文件Lance Ting所作,如果转载或使用请标明具体出处!
 **/
public class LocalDateFormatConverter implements Converter<LocalDateTime> {
    /**
     * 默认会使用该格式.
     */
    private final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    /**
     * excel转化后的类型
     *
     * @return clazz
     */
    @Override
    public Class<?> supportJavaTypeKey() {
        return LocalDateTime.class;
    }

    /**
     * excel中的数据类型,统一设置字符串
     *
     * @return 单元格数据类型
     */
    @Override
    public CellDataTypeEnum supportExcelTypeKey() {
        return CellDataTypeEnum.STRING;
    }

    /**
     * 导入数据转换时间
     *
     * @param cell     当前单元格的数据
     * @param property 当前单元格属性
     * @param config   全局配置
     * @return 读取到内存中的数据
     * @throws Exception 导入异常
     */
    @Override
    public LocalDateTime convertToJavaData(CellData cell, ExcelContentProperty property, GlobalConfiguration config) throws Exception {
        return LocalDateTime.parse(cell.getStringValue(), FORMATTER);
    }

    /**
     * 导出数据转换时间
     *
     * @param value    当前时间格式值
     * @param property 当前单元格属性
     * @param config   全局配置
     * @return 写出到excel文件的数据
     * @throws Exception 导出异常
     */
    @Override
    public CellData<?> convertToExcelData(LocalDateTime value, ExcelContentProperty property, GlobalConfiguration config) throws Exception {
        return new CellData<>(FORMATTER.format(value));
    }

}